#ifndef RTSABUILD_IHRTSAP2pEventHandler_H
#define RTSABUILD_IHRTSAP2pEventHandler_H

#include "HRTSAEngineParam.h"

namespace huawei {
    namespace rtsap2p {


        enum HRTSAP2pConnState {
            PEER_CONN_CONNECTED = 0,   // 对端连接成功
            PEER_CONN_DISCONNECTED     // 对端断链
        };

        enum HRTSAP2pLoginResult {
            LOGIN_SUCCESS = 0,  // 登录成功
            LOGIN_FAILED        // 登录失败
        };

        
        class IHRTSAP2pEventHandler {
        public:
            // ==================================Common==============================================
            virtual ~IHRTSAP2pEventHandler() = default;
            /**
             * 登录结果通知
             * 保留userid和roomid是为了可以做多实例区分
             * @param userId 用户ID
             * @param roomId 房间号
             * @param elapsed 接口从开始调用到反馈的时间
             */
            virtual void onLoginResult(const char *userId, const char * roomId,  HRTSAP2pLoginResult loginResult, const char *resultMsg) {}

            /**
             * 通知链路状态信息
             *
             * @param state 当前状态，值参考 NetworkConnectState;
             * @param reason 原因，值参考 NetworkConnectStateReason;
             */
            virtual void onPeerConnectionChangedNotify(const char *userId, const char *roomId, HRTSAP2pConnState state) {}

            /**
             * 对端数据包回调
             */
            virtual void onRecvPeerPacketData(const char *userId, const char * roomId, const unsigned char *packet,
                                              unsigned int length) {}

            /**
             * 错误码提示
             *
             * @param code 错误标识符
             */
            virtual void onError(int code, const char *msg) {}

            /**
             * 发生警告回调。
             * 该回调方法表示 SDK 运行时出现了（网络或媒体相关的）警告。通常情况下，SDK 上报的警告信息 App 可以忽略。
             *
             * @param code 警告标识符
             */
            virtual void onWarning(int code, const char *msg) {}

            /* *
             * @param reason 原因
            */
            virtual void onConnectionChangedNotify(int state, int reason) {}

            /**
             * 信令相关信息回调
             */
            virtual void onRecvMsg(const char* userId, const char* msgInfo) {}

            /**
             * 配置信息回调更新
             */
            virtual void onConfigNotify(const char * cfgInfo) {}

            virtual void onJoinRoomSuccessSetRid(const uint64_t rid) {}

        };
    } // namespace rtsa
} // namespace huawei

#endif // RTSABUILD_IHRTSAP2pEventHandler_H
